package com.ronz.linkedlist;

import com.ronz.linkedlist.util.HeroNode;
import com.ronz.linkedlist.util.NodeUtil;

/**
 * @Description 反转单链表
 * @Author Ronz
 * @Date 2020/12/22 15:49
 * @Version 1.0
 */
public class No3_PenTest_SingleLinkedList {


    public static void main(String[] args) {
        // 构造头结点
        HeroNode head = NodeUtil.getTestList();

        reverseList(head);
        showList(head);
    }

    /**
     * @Description 反转链表
     * @Param [head]
     * @return void
     */
    public static void reverseList(HeroNode head){
        // 1. 判断链表是否为空或者只有一个结点
        if (head.next == null || head.next.next == null){
            return;
        }
        // 2. 定义一个辅助的指针变量，帮助我们遍历原来的链表
        HeroNode cur = head.next;
        HeroNode next = null;   // 指向当前结点[cur] 的下一个结点
        HeroNode reverHead = new HeroNode(0, "", "");
        while (cur != null){
            next = cur.next;                // 先把当前结点的下一个结点保存下来
            cur.next = reverHead.next;      // 接着让当前结点指向翻转链表之前的第一个结点
            reverHead.next = cur;           // 让当前结点作为翻转链表的第一结点
            cur = next;                     // 移动到原来链表的下一个结点
        }
        head.next = reverHead.next;
    }

    /**
     * @Description 打印链表
     * @Param [head]
     * @return void
     */
    public static void showList(HeroNode head){
        while (true){
            if (head.next == null){
                break;
            }
            System.out.println(head.next);
            head = head.next;
        }
    }



}


